/**
 * java对象和类
 * 类含义： 定义一个类，创建对象，调用方法，访问属性。
 * 对象含义： 类的实例，具有状态和行为。
 * 继承： 子类继承父类的属性和方法，并可以添加新的属性和方法。
 * 封装： 将对象的状态（字段）私有化，通过公共方法访问。
 * 多态： 父类引用指向子类对象，调用子类的方法，实际执行的是子类的方法。
 * 接口： 定义类必须实现的方法，支持多重继承。
 * 方法： 类中定义的函数，用于实现对象的功能。
 * 方法重载： 同名方法，参数不同。
 * 构造方法： 每个类都有构造方法，如果没有显示地为类定义构造方法，系统会提供一个默认的构造方法。
  1. 一个对象必须要调用一个构造方法，否则系统不会创建对象。
  2. 构造方法的名称必须与类名相同。
  3. 构造方法没有返回值，但可以返回对象。
  4. 构造方法可以有参数，参数可以是任意类型。
  5. 构造方法可以调用其他构造方法。
 */

public class Person {
    private String name;
    private int age;

    public Person() {
        System.out.println("Person constructor called.");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("Person constructor called with name=" + name + " and age=" + age);
    }

    public void sayHello() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
    public static void main(String[] args) {
        Person p = new Person("Alice", 25);
        p.sayHello();
        p.setName("Bob");
        p.sayHello();
        System.out.println("Name: " + p.getName() + ", Age: " + p.getAge());
    }
}